;; EX-41.scm - Multiple Channel Expansion Behaviour

;; Multiple channel expansion is implemented for UGen constructor
;; procedures.  The implemetation is in the procedure
;; 'uspec->procedure' in the file 'share/scheme/uspec-compile.scm'.

;; A UGen constructor for a UGen that has a single output channel
;; evaluates to a <ugen> value.

(SinOsc.ar 440 0 0.2)

;; => <ugen>

;; A UGen constructor for a UGen that has a multiple output channels
;; evaluates to a list of <output-proxy> values.

(Pan2.ar (SinOsc.ar 440 0 0.2) -1/3)

;; => (<output-proxy> <output-proxy>)

;; MCE propagates downward through UGen graphs.

(SinOsc.ar '(440 660) 0 0.2)

;; => (<ugen> <ugen>)

(SinOsc.ar (LFSaw.ar '(5/6 6/7) 0 440 220) 0 0.2)

;; => (<ugen> <ugen>)

(SinOsc.ar (Pan2.ar (LFSaw.ar 1 0 440 110)) 0 0.2)

;; => (<ugen> <ugen>)

(Mix (Pan2.ar (SinOsc.ar '(440 660) 0 0.2) '(-0.75 0.75)))

;; => ((<output-proxy> <output-proxy>) (<output-proxy> <output-proxy>))

(SinOsc.ar (Pan2.ar (LFSaw.ar 1 0 440 220) 0.5))

;; => (<ugen> <ugen>)

;; Sets of output proxies `taint' the graph as it descends.  

(Mix (SinOsc.ar (Pan2.ar (LFSaw.ar '(5/6 6/7) 0 440 100) '(-1 1))))

;; => ((<ugen> <ugen>) (<ugen> <ugen>))
